home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Amiga Amateur Radio User Group / AARUG UK #29 (199x)(Amiga Amateur Radio User Group UK)(PD)[G4DCV].zip / AARUG UK #29 (199x)(Amiga Amateur Radio User Group UK)(PD)[G4DCV].adf / plan10-13 (.txt) < prev    next >
AmigaBASIC Source Code  |  1978-01-09  |  10KB  |  376 lines

  1. REM AO10-13 Satellite Tracker
  2. WINDOW 2,"output",,15
  3.  top:
  4.  CLS:PRINT
  5. PRINT"       ***********************************************
  6. PRINT 
  7. PRINT"       *     AO10-13 Satellite Tracker for AMIGA     *"
  8.  
  9. PRINT
  10. PRINT"       *      Based on Plan 10-13 V3.0 (c) 1985      *"
  11. PRINT
  12. PRINT"       *              By James Miller                *"
  13. PRINT
  14. PRINT"       *     Modified by VK6KHD 1989 for AMIGA       *"
  15. PRINT 
  16. PRINT"       **A $10 Donation to AMSAT Aust if used please**"
  17. PRINT
  18. PRINT"                   Do you wish to update ?"
  19. PRINT
  20. PRINT"                    1. Satellite Data"
  21.  
  22. PRINT
  23. PRINT"                    2. Location Data"
  24. PRINT
  25. PRINT"                   Else press space bar"
  26.   
  27. getkey:
  28.  
  29.  
  30.  
  31.  
  32.  C$=INKEY$
  33.  IF C$=""THEN GOTO getkey
  34. x=VAL(C$)
  35. ON x GOTO jump1,jump2
  36. start:
  37.  
  38.   DD$="MONTUEWEDTHUFRISATSUNMON"
  39.  
  40.   OPEN "I",#2,"df0:satellites/satdata/LOCATION"
  41.   INPUT#2,LC$,LA,LO,HT
  42.   CLOSE#2
  43.   GOSUB SETUPVAR
  44.   OPEN "I",#2,"DF0:satellites/satdata/menudata"
  45.   INPUT#2,m1$,m2$,m3$,m4$,m5$,m6$,m7$,m8$
  46.   CLOSE#2
  47.  
  48.  CLS:PRINT :PRINT 
  49.  PRINT"             Satellite Calculations" :PRINT 
  50.  PRINT"       1. ";m1$;TAB(35);"5. ";m5$
  51.  PRINT
  52.  PRINT"       2. ";m2$;TAB(35);"6. ";m6$
  53.  PRINT
  54.  PRINT"       3. ";m3$;TAB(35);"7. ";m7$
  55.  PRINT
  56.  PRINT"       4. ";m4$;TAB(35);"8. ";m8$
  57.  PRINT
  58.  PRINT"         Your choice? (1-8 only)"
  59. loop:
  60.      aa$=INKEY$
  61.      IF aa$="" THEN GOTO loop 
  62.      IF VAL(aa$)>8 THEN GOTO loop
  63.   satno$="DF0:satellites/satdata/sat "+aa$
  64.   OPEN "I",#2,satno$
  65.   INPUT#2,sat$,ye,TE,IN,RA,EC,WP,MA,MM,m2,RV,A,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,LT,LN
  66.   CLOSE#2
  67.   IF ye<1000 THEN : CLS : GOTO start 
  68.   GOSUB SETUP
  69.   GOSUB TITLE
  70.   
  71.   PRINT"           Please enter the following:"
  72.   PRINT
  73.   INPUT"            Date (DD,MM,YY)        : ",DA,M,Y:YZ=Y
  74.  
  75.   INPUT"            Duration (Day/s)       : ",DZ
  76.  
  77.   INPUT"            Time step,minutes(0-60): ",TD
  78.   
  79.   DATA 0,31,59,90,120,151,181,212,243,273,304,334,365
  80.   F9=0:IF Y/4=INT(Y/4) THEN F9=1
  81.   
  82.   RESTORE: FOR Q=1 TO M : READ D9 : NEXT Q
  83.   SD=D9+DA:IF M>2 THEN SD=SD+F9
  84.   SZ=SD+DZ-1
  85.   PRINT
  86.   PRINT"          ";DA;"/";M;"/";Y" Equates to day#: ";SD
  87.   
  88.  
  89.   PRINT
  90.   PRINT"            Hard copy requred Y/N ?"
  91.   
  92.   loop2:
  93.   
  94.     QA$=INKEY$
  95.     IF QA$="" THEN GOTO loop2
  96.     QA$=UCASE$(QA$)
  97.     
  98.     IF QA$="N" THEN GOTO CALCS
  99.     IF QA$<>"Y" THEN GOTO loop2
  100.   LPRINT   
  101.   LPRINT CHR$(14);sat$;" FOR:- ";LC$
  102.   LPRINT:LPRINT "Visible passes starting at 0000 UTC ";DA;"/";M;"/";Y
  103.   LPRINT:LPRINT "Satellite attitude used on this printout is lat=";RD*LT;
  104.   LPRINT " lon=";RD*LN
  105.   LPRINT:LPRINT"Print out run on ";MID$(DATE$,4,2);"/";LEFT$(DATE$,2);"/";RIGHT$(DATE$,2);"  at ";LEFT$(TIME$,5)
  106.   CALCS:
  107.    CLS:PRINT:PRINT :PRINT :PRINT :PRINT  
  108.    
  109.    PRINT"              ***** CALCULATING *****":PRINT
  110.    PRINT"               Seeking visible passes"
  111.    YR=1900+Y
  112.    FOR DY=SD TO SZ
  113.    FOR HR=0 TO 23
  114.    FOR MIN= 0 TO 59 STEP TD
  115.    TN=DY+(HR+MIN/60)/24
  116.  GOSUB SATVEC     
  117.  GOSUB RANGEVEC
  118.  GOSUB SUNVEC
  119.  IF EL>-3 THEN GOSUB DATAOUT
  120.  NEXT:NEXT:NEXT
  121.  PRINT :PRINT 
  122.  
  123.  PRINT"   Do you wish to continue (C), change QTH"
  124.  PRINT
  125.  PRINT"   or satellite data (D), or exit Plan10-13 (E)"
  126.  
  127.  loop8:
  128.  
  129.    yn$=INKEY$
  130.    IF yn$="" THEN GOTO loop8
  131.    yn$=UCASE$(yn$)
  132.    IF yn$="C" THEN GOTO start
  133.    IF yn$="D" THEN GOTO top
  134.    WINDOW CLOSE 2:SYSTEM
  135.  
  136. SETUP:
  137.  
  138.  LA=LA*DR:LO=LO*DR:HT=HT/1000
  139.  CL=COS(LA):SL=SIN(LA):CO=COS(LO):SO=(LO)
  140.  RE=6378.14:FL=1/298.257
  141.  RP=RE*(1-FL):XX=RE*RE:ZZ=RP*RP
  142.  D=SQR(XX*CL*CL+ZZ*SL*SL)
  143.  RX=XX/D+HT:RZ=ZZ/D+HT
  144.  UX=CL*CO:EX=-SO:NX=-SL*CO
  145.  UY=CL*SO:EY=CO:NY=-SL*SO
  146.  UZ=SL:EZ=0:NZ=CL
  147.  OX=RX*UX:OY=RX*UY:OZ=RZ*UZ
  148.  RA=RA*DR:IN=IN*DR:WP=WP*DR:LT=LT*DR
  149.  MA=MA*DR:MM=MM*PI*2:m2=m2*2*PI:LN=LN*DR
  150.  YM=365.25:YT=5.34346e-315
  151.  WW=2*PI/YT
  152.  WE=2*PI+WW
  153.  J2=0.00108263
  154.  B=A*SQR(1-EC*EC)
  155.  SI=SIN(IN):CI=COS(IN)
  156.  PC=RE*A/(B*B):PC=1.5*J2*PC*PC*MM
  157.  QD=-PC*CI
  158.  WD=PC*(5*CI*CI-1)/2
  159.  DC=(m2/MM)/3
  160.  YG=1985:G0=99.6113
  161.  M0=365.929:MD=5.29966e-315
  162.  IS=23.4412*DR:CNS=COS(IS):SNS=SIN(IS)
  163.  E1=5.27427e-315:E2=0.00034922:E3=5.06e-06
  164.  TG=INT((ye-1)*YM)-INT((YG-1)*YM)+TE
  165.  GE=G0*DR+TG*WE
  166.  MRSE=G0*DR+TG*WW+PI
  167.  ME=(M0+MD*TG)*DR
  168.  RETURN
  169. SATVEC:
  170.  T=(INT((YR-1)*YM)-INT((ye-1)*YM))+(TN-TE)
  171.  DT=DC*T/2:KD=1-4*DT:KP=1+7*DT
  172.  M=MA+MM*T*(1+3*DT)
  173.  WR=INT(M/(2*PI))
  174.  M=M-WR*2*PI
  175.  RN=RV+WR
  176.  EA=M
  177.  
  178.  NLOOP:
  179.   C=COS(EA):S=SIN(EA)
  180.   DNOM=1-EC*C
  181.   DE=(EA-EC*S-M)/DNOM
  182.   EA=EA-DE
  183.   IF ABS(DE)>0.002 THEN NLOOP
  184.  
  185.  C=COS(EA):S=SIN(EA)
  186.  RGC=A*(1-EC*C)*KD
  187.  SX=A*(C-EC)*KD:TA=-COS(LT):XA=TA*COS(LN)
  188.  SY=B*S*KD:YA=TA*SIN(LN):ZA=-SIN(LT)
  189.  W=WP+WD*T*KP:C=COS(W):S=SIN(W)
  190.  x=SX*C-SY*S:TA=XA:XA=TA*C-YA*S
  191.  Y=SX*S+SY*C:YA=TA*S+YA*C
  192.  Z=Y*SI:TA=ZA:ZA=YA*SI+TA*CI:QZ=ZA
  193.  Y=Y*CI:YA=YA*CI-TA*SI:QY=YA
  194.  QX=XA
  195.  R0=RA+QD*T*KP
  196.  GA=GE+WE*T
  197.  Q=R0-GA
  198.  C=COS(Q):S=SIN(Q)
  199.  SX=x*C-Y*S:TA=XA:XA=TA*C-YA*S
  200.  SY=x*S+Y*C:YA=TA*S+YA*C
  201.  SZ=Z
  202.  C=COS(R0):S=SIN(R0)
  203.  TX=x*C-Y*S:TA=QX:QX=TA*C-QY*S
  204.  TY=x*S+Y*C:QY=TA*S+QY*C
  205.  TZ=Z
  206.  MX=S*SI:MY=-C*SI:MZ=CI
  207.  RETURN
  208.  
  209. SUNVEC:
  210.  
  211.  MS=ME+(MD*T)*DR
  212.  TS=MRSE+WW*T+E1*SIN(MS)+E2*SIN(2*MS)+E3*SIN(3*MS)
  213.  C=COS(TS):S=SIN(TS)
  214.  PX=C:PY=S*CNS:PZ=S*SNS
  215.  CSA=QX*PX+QY*PY+QZ*PZ
  216.  ILL=SQR(1-CSA*CSA)
  217.  TX=TX/RGC:TY=TY/RGC:TZ=TZ/RGC
  218.  CUA=-(TX*PX+TY*PY+TZ*PZ)
  219.  UMD=RGC*SQR(1-CUA*CUA)/RE
  220.  F=(PX*MX+PY*MY+PZ*MZ)
  221.  SEL=ATN(F/SQR(-F*F+1))
  222.  IF CUA>0 THEN ECL$=" + "
  223.  IF CUA<0 THEN ECL$=" - "
  224.  IF UMD<=1 AND CUA>=0 THEN ECL$="ECL"
  225.  RETURN
  226.  
  227. RANGEVEC:
  228.  
  229.  RX=SX-OX:RY=SY-OY:RZ=SZ-OZ
  230.  R=SQR(RX*RX+RY*RY+RZ*RZ)
  231.  RX=RX/R:RY=RY/R:RZ=RZ/R
  232.  U=RX*UX+RY*UY+RZ*UZ
  233.  E=RX*EX+RY*EY+RZ*EZ
  234.  N=RX*NX+RY*NY+RZ*NZ
  235.  AZ=RD*(ATN(E/N))
  236.  IF N<0 THEN AZ=AZ+180
  237.  IF AZ<0 THEN AZ=AZ+360
  238.  G=ATN(U/SQR(U*U+1))
  239.  EL=RD*G
  240.  H=-(XA*RX+YA*RY+ZA*RZ)
  241.  H0=-ATN(H/SQR(-H*H+1))+5.30277e-315
  242.  SQ=RD*H0
  243.  RETURN
  244.  
  245. DATAOUT:
  246.  
  247.  GOSUB DAYCON:P=JD:GOSUB STRCON :DAT$=x$+" "+P$
  248.  P=MU:GOSUB STRCON: DAT$=DAT$+"/"+P$
  249.  P=YX:GOSUB STRCON: DAT$=DAT$+"/"+P$
  250.  P=HR:GOSUB STRCON: DAT$=DAT$+"  "+P$
  251.  P=MIN:GOSUB STRCON: DAT$=DAT$+":"+P$
  252.  R=INT(R+0.5):EL=INT(EL+0.5):AZ=INT(AZ+0.5)
  253.  SQ=INT(SQ+0.5):ILL=INT((100*ILL)+0.5)
  254.  UMD=(INT((100*UMD)+0.5))/100
  255.  M=INT(M*128/PI):SEL=INT((RD*(SEL)+0.5))
  256.  IF sat$="OSCAR-10" THEN MD$="N/A":GOTO JUMP
  257.  IF M=0 THEN MD$="PER":GOTO JUMP
  258.  IF M>=A0 AND M<=A1 THEN MD$=" B ": GOTO JUMP
  259.  IF M>=A2 AND M<=A3 THEN MD$=" B ": GOTO JUMP
  260.  IF M>=A4 AND M<=A5 THEN MD$="J-L": GOTO JUMP
  261.  IF M>=A6 AND M<=A7 THEN MD$=" * ": GOTO JUMP
  262.  IF M>=A8 AND M<=A9 THEN MD$=" - ": GOTO JUMP
  263.  MD$="OFF"
  264.  
  265. JUMP:
  266.  
  267.  IF RN<>OL THEN OL=RN:GOSUB PRNHD
  268.  IF QA$="Y" THEN GOSUB PRNOUT
  269.  GM$=RIGHT$(DAT$,5)
  270.  PRINT DY;TAB(7);GM$;
  271.  PRINT TAB(15);
  272.  PRINT USING "###";AZ;
  273.  PRINT TAB(20);
  274.  PRINT USING "##";EL;
  275.  PRINT TAB(25);
  276.  PRINT USING "###";SQ;
  277.  PRINT TAB(30);
  278.  PRINT USING "###";M;
  279.  PRINT TAB(35);
  280.  PRINT USING "#####";R;
  281.  PRINT TAB(45);ECL$;SPC(3);MD$ 
  282.  RETURN
  283.  
  284. PRNHD:
  285.  
  286.  CLS:PRINT 
  287.  PRINT "Satellite: ";sat$;"   Run Calculated on ";MID$(DATE$,4,2);"/";LEFT$(DATE$,2);"/";RIGHT$(DATE$,2) 
  288.  PRINT "                                     at ";LEFT$(TIME$,5)
  289.  PRINT "Year: ";YR;"  Orbit: ";RN
  290.  PRINT "Solar illumination: ";ILL;"%   Solar elevation: ";SEL;" degrees"
  291.  PRINT " DAY  HH:MM   AZ   EL   SQ   MA   RANGE     ECL  Mode"
  292.  PRINT "-------------------------------------------------------"
  293.  IF QA$="Y" THEN GOSUB HDPRN : RETURN
  294.  IF QA$="N" THEN RETURN
  295.  
  296. SETUPVAR:
  297.  
  298.  PI=5.30795e-315:RD=180/PI:DR=1/RD
  299.  OLDRN=0
  300.  RETURN
  301.  
  302. TITLE:
  303.  
  304.  CLS:PRINT
  305.  PRINT "                 ***** PLAN 10-13 *****"
  306.  PRINT 
  307.  PRINT "   Location: "LC$;"  Lat: ";RD*LA;" Lon: ";RD*LO;" (east)"
  308.  PRINT "   Ephemeris dated: " ;ye;" Day: ";INT(TE)
  309.  PRINT 
  310.  PRINT "   Satellite attitude: Lat: ";RD*LT;" Lon: ";RD*LN
  311.  PRINT 
  312.  PRINT "   Update satellite lat/lon via satellite data option":PRINT
  313.  RETURN
  314.  
  315. STRCON:
  316.  
  317.  P$=CHR$(48+INT(P/10))+CHR$(48+P-10*INT(P/10))
  318.  RETURN
  319. REM Returns three character printable string not used in this version!
  320.  P$=CHR$(48+INT(P/100))
  321.  RETURN
  322.  END
  323.  
  324. DAYCON:
  325.  
  326.  JD=INT((YZ-1)*365.25)+DY+428:DX=(JD+5)-(7*INT((JD+5)/7))+1
  327.  YX=INT((JD-122.1)/365.25):JD=JD-INT(YX*365.25)
  328.  MU=INT(JD/30.6001):JD=JD-INT(MU*30.6001)
  329.  MU=MU-1
  330.  IF MU>12 THEN 
  331.      MU=MU-12
  332.      YX=YX+1
  333.  END IF
  334.  x$=MID$(DD$,3*DX+1,3)
  335.  RETURN
  336.  
  337. PRNOUT:
  338.  
  339.  LPRINT DAT$;TAB(25);
  340.  LPRINT USING "###";AZ;
  341.  LPRINT TAB(30);
  342.  LPRINT USING "##";EL;
  343.  LPRINT TAB(35);
  344.  LPRINT USING "##";SQ;
  345.  LPRINT TAB(40);
  346.  LPRINT USING "###";M;
  347.  LPRINT TAB(45);
  348.  LPRINT USING "#####";R;
  349.  LPRINT TAB(51);
  350.  LPRINT USING "##.##";UMD;
  351.  LPRINT TAB(58);ECL$;TAB(64);MD$
  352.  RETURN
  353.  
  354. HDPRN:
  355.  
  356.  LPRINT
  357.  LPRINT" Day#";DY;"   Orbit#";RN;"    ILL:";ILL;"%  ";
  358.  LPRINT"Solar El:";SEL;"Degrees"
  359.  LPRINT"-------------------------------------------------------------------"
  360.  LPRINT"DAY   DATE    HH:MM     AZ   EL   SQ    MA  RANGE   UMD  ECL  MODE";
  361.  
  362.  LPRINT"-------------------------------------------------------------------"
  363.  RETURN
  364.  
  365.  
  366. jump1:
  367.    WINDOW CLOSE 2
  368.    CHAIN "df0:satellites/MENU"           
  369.  
  370. jump2:
  371.    WINDOW CLOSE 2
  372.    CHAIN "df0:satellites/setloc" 
  373.   
  374.  
  375.  
  376.